package com.situ.service.impl;
//实现类

import com.situ.dao.UserDao;
import com.situ.entity.Product;
import com.situ.entity.User;
import com.situ.service.UserService;
import com.situ.vo.ResultVO;
import com.situ.vo.TableVO;
import com.situ.vo.UserVO;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * @author yangkx
 * @create 2023-08-29-9:23
 */
public class UserServiceImpl implements UserService {

    UserDao dao = new UserDao();

    //登录判断
    @Override
    public boolean check(String username, String password) {
        //先根据用户名查
        List<User> list = dao.selectByUsername(username);
        //如果返回的数组为空(list.size() == 0)，说明用户名不对
        if (list.isEmpty()) {
            return false;
        }
        //只要有这个用户名（保证每个用户的用户名唯一）
        User user = list.get(0);//根据用户名最多查到一个用户

        //把数据库里查到该用户名的密码与传过来的密码比较（比较结果为boolean值）
        return user.getPassword().equals(password);
    }

    //查询表格数据
    @Override
    public TableVO list(Integer page, Integer limit, String username, String phoneNumber) {
        //查出来商品的数据（list格式）
        List<UserVO> list = dao.list(page, limit, username, phoneNumber);
        //把数据返回（响应）给table小工具（谁发的请求返回给谁）
        //创建一个TableVO类型的对象来接list
        TableVO vo = new TableVO();
        vo.setCount(dao.count(username, phoneNumber));
        vo.setData(list);//实际展示在页面上的内容
        return vo;
    }

    //保存
    @Override
    public ResultVO save(User u) {
        ResultVO vo = new ResultVO();
        //判断是否用户名重复
        List<User> list = dao.selectByUsername(u.getUsername());
        //如果根据用户名查到了，说明用户名重复，不能添加用户
        if (list.size() == 1) {
            vo.setCode(2);
            vo.setMsg("用户名重复，请重新输入");
            return vo;
        }
        //查电话号码长度是不是11位
        if (u.getPhoneNumber().length() != 11){
            vo.setCode(2);
            vo.setMsg("电话号码有误，请重新输入");
            return vo;
        }
        //查电话号码是不是0-9纯数字
        for (int i = 0; i < 11; i++) {
            char c = u.getPhoneNumber().charAt(i);
            if (c<'0'||c>'9'){
                vo.setCode(2);
                vo.setMsg("电话号码有误，请重新输入");
                return vo;
            }
        }
        //如果都没问题，说明用户名不重复，可以添加用户
        u.setCreateTime(LocalDateTime.now());//获取当前时间，放到里面
        if (u.getId() == null) {//如果是新增过来 id=null 执行保存操作
            dao.insert(u);
        } else {//如果是编辑过来 id != null 执行更新操作
            dao.update(u);
        }
        vo.setCode(0);
        vo.setMsg("修改成功");
        return vo;
    }

    //删除
    @Override
    public ResultVO delete(Integer id) {
        List<User> list = dao.selectById(id);
        User u = list.get(0);

        ResultVO vo = new ResultVO();
        //如果是管理员账号，删不了
        if (u.getUsername().equals("admin")) {
            vo.setCode(2);
            vo.setMsg("此账号是管理员账号，不能删除");
        } else {
            dao.delete(id);
        }
        return vo;
    }

    //编辑——查询该行数据带到前台
    @Override
    public User selectById(Integer id) {
        List<User> list = dao.selectById(id);
        return list.get(0);
    }


}
